package org.dei.perla.utils.messages;

import org.dei.perla.sys.device.channel.frame.address.FrameAddress;

public abstract class Message {

	/**
	 * Indirizzo generico
	 */
	protected FrameAddress pAddress;

	/**
	 * Payload generico
	 */
	protected byte[] pPayload;

	/**
	 * Costruttore, inizializza un messaggio vuoto.
	 *
	 */
	public Message() {
		this.pAddress = null;
		this.pPayload = null;
	}

	/**
	 * Costruttore, inizializza un messaggio contenente solo un payload.
	 * @param parPayload 
	 */
	public Message(byte[] parPayload) {
		this.pAddress = null;
		this.pPayload = parPayload;
	}

	/**
	 * Costruttore, inizializza un messaggio contenente un indirizzo e il payload.
	 * @param parAddress Indirizzo da inviare
	 * @param parPayload Payload da inviare
	 */
	public Message(FrameAddress parAddress, byte[] parPayload) {
		this.pAddress = parAddress;
		this.pPayload = parPayload;
	}

	/**
	 * Restituisce l'indirizzo contenuto nel messaggio
	 * @return
	 */
	public FrameAddress getAddress() {
		return pAddress;
	}

	/**
	 * Imposta un indirizzo
	 * @param address
	 */
	public void setAddress(FrameAddress address) {
		pAddress = address;
	}

	/**
	 * Restituisce il payload
	 * @return 
	 */
	public byte[] getPayload() {
		return pPayload;
	}

	/**
	 * Imposta il payload del messaggio
	 * @param payload
	 */
	public void setPayload(byte[] payload) {
		pPayload = payload;
	}

	/**
	 * Restituisce l'oggetto trasformato in una stringa testuale comprensibile
	 */
	abstract public String toString();
}
